/************************************************************************************************
*Definicion de Nodo para listas                                                                 *
*Author     :   Simon Emmanuel Gutierrez Brida                                                  *
*Version    :   0.1                                                                             *
*Fecha      :   Septiembre/2011                                                                 *
*-------------------------------                                                                *
*Define la estructura y funciones asociadas para un Nodo a ser utilizado en listas encadenadas  *
*Un nodo esta formado por :                                                                     *
*- info         :   la informacion contenida por el nodo                                        *
*- siguiente    :   un puntero al siguiente nodo                                                *
*************************************************************************************************/

#ifndef NODOLISTA_H
#define NODOLISTA_H

#include "lista.h"

struct NodoLista {
    Lista *info;
    struct NodoLista *next;
};

typedef struct NodoLista NodoLista;

/*funciones publicas para manipular nodos*/

/*constructores*/

/**
 * Construye un nuevo nodo vacio
 */
NodoLista* nuevoNodoLista_vacio();

/**
 * Construye un nuevo nodo con una lista como informacion
 * parametros
 * info: la lista que va a contener el nodo
 */
NodoLista* nuevoNodoLista_info(Lista *info);

/**
 * Construye un nuevo nodo con una lista y un nodo siguiente
 * parametros
 * info: la lista que va a contener el nodo
 * siguiente: el nodo siguiente a este
 */
NodoLista* nuevoNodoLista_info_siguiente(Lista *info, NodoLista *siguiente);

/*lectura de informacion*/

/**
 * Obtiene la lista almacenada por un nodo
 * parametros
 * nodo: el nodo del cual se va a obtener la lista
 */
Lista* obtenerInfo_nodoLista(NodoLista *nodo);

/**
 * Obtiene el nodo siguiente a otro
 * parametros
 * nodo: el nodo del cual se va a obtener el nodo siguiente
 */
NodoLista* obtenerSiguiente_nodoLista(NodoLista *nodo);

/*escritura de informacion*/

/**
 * Define la lista contenida por un nodo
 * parametros
 * nodo: el nodo al cual se le va a definir la nueva lista
 * info: la lista que va a contener el nodo
 */
void definirInfo_nodoLista(NodoLista *nodo, Lista *info);

/**
 * Define el nodo siguiente a otro nodo
 * parametros
 * nodo: el nodo al cual se le va a definir el nodo siguiente
 * siguiente: el nodo que le va a seguir al anterior
 */
void definirSiguiente_nodoLista(NodoLista *nodo, NodoLista *siguiente);

#endif